package is.idega.idegaweb.marathon;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
public class PDFTester {
public static void main(String args[]) {
PDFTester tester = new PDFTester();
try {
//tester.doIt("Palli test strengur", "/Users/palli/Downloads/test.pdf");
tester.doIt3();
} catch (COSVisitorException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void doIt( String message, String outfile ) throws IOException, COSVisitorException
{
// the document
PDDocument doc = null;
try
{
doc = new PDDocument();
// Page 1
PDFont font = PDType1Font.HELVETICA;
PDPage page = new PDPage();
page.setMediaBox(PDPage.PAGE_SIZE_A4);
doc.addPage(page);
float fontSize = 12.0f;
PDRectangle pageSize = page.findMediaBox();
float centeredXPosition = (pageSize.getWidth() - fontSize/1000f)/2f;
float stringWidth = font.getStringWidth( message );
float centeredYPosition = (pageSize.getHeight() - (stringWidth*fontSize)/1000f)/3f;
PDPageContentStream contentStream = new PDPageContentStream(doc, page, false, false);
contentStream.setFont( font, fontSize );
contentStream.beginText();
// counterclockwise rotation
for (int i=0;i<8;i++)
{
contentStream.setTextRotation(i*Math.PI*0.25, centeredXPosition,
pageSize.getHeight()-centeredYPosition);
contentStream.drawString( message + " " + i);
}
// clockwise rotation
for (int i=0;i<8;i++)
{
contentStream.setTextRotation(-i*Math.PI*0.25, centeredXPosition, centeredYPosition);
contentStream.drawString( message + " " + i);
}
contentStream.endText();
contentStream.close();
// Page 2
page = new PDPage();
page.setMediaBox(PDPage.PAGE_SIZE_A4);
doc.addPage(page);
fontSize = 1.0f;
contentStream = new PDPageContentStream(doc, page, false, false);
contentStream.setFont( font, fontSize );
contentStream.beginText();
// text scaling
for (int i=0;i<10;i++)
{
contentStream.setTextScaling(12+(i*6), 12+(i*6), 100, 100+i*50);
contentStream.drawString( message + " " +i);
}
contentStream.endText();
contentStream.close();
// Page 3
page = new PDPage();
page.setMediaBox(PDPage.PAGE_SIZE_A4);
doc.addPage(page);
fontSize = 1.0f;
contentStream = new PDPageContentStream(doc, page, false, false);
contentStream.setFont( font, fontSize );
contentStream.beginText();
int i = 0;
// text scaling combined with rotation
contentStream.setTextMatrix(12, 0, 0, 12, centeredXPosition, centeredYPosition*1.5);
contentStream.drawString( message + " " +i++);
contentStream.setTextMatrix(0, 18, -18, 0, centeredXPosition, centeredYPosition*1.5);
contentStream.drawString( message + " " +i++);
contentStream.setTextMatrix(-24, 0, 0, -24, centeredXPosition, centeredYPosition*1.5);
contentStream.drawString( message + " " +i++);
contentStream.setTextMatrix(0, -30, 30, 0, centeredXPosition, centeredYPosition*1.5);
contentStream.drawString( message + " " +i++);
contentStream.endText();
contentStream.close();
doc.save( outfile );
}
finally
{
if( doc != null )
{
doc.close();
}
}
}
public void doItUjac() {
}
public void doIt3() throws IOException, COSVisitorException {
// the document
PDDocument doc = null;
try {
doc = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
doc.addPage(page);
PDXObjectImage ximage = new PDJpeg(doc, new FileInputStream(
"/Users/palli/Downloads/rm_vidurkenning_2010.jpg"));
ximage.setHeight((int) PDPage.PAGE_SIZE_A4.getHeight());
ximage.setWidth((int) PDPage.PAGE_SIZE_A4.getWidth());
PDPageContentStream contentStream = new PDPageContentStream(doc,
page);
contentStream.drawImage(ximage, 0, 0);
//PDFont font = PDType1Font.HELVETICA_BOLD;
PDFont font = PDTrueTypeFont.loadTTF(doc, "/Users/palli/Downloads/AppleMyungjo.ttf");
float fontSize = 20.0f;
PDRectangle pageSize = page.findMediaBox();
String message = "Björn Margeirsson";
float stringWidth = font.getStringWidth(message);
// get page center
float centeredPosition = (pageSize.getWidth() - (stringWidth * fontSize) / 1000f) / 2f;
contentStream.beginText();
contentStream.setFont(font, fontSize);
contentStream.setTextMatrix(1, 0, 0, 1, centeredPosition, 410);
contentStream.drawString(message);
fontSize = 14.0f;
contentStream.setFont(font, fontSize);
message = "lauk 42,2 km maraþon með eftirfarandi árangri:";
stringWidth = font.getStringWidth(message);
centeredPosition = (pageSize.getWidth() - (stringWidth * fontSize) / 1000f) / 2f;
contentStream.setTextMatrix(1, 0, 0, 1, centeredPosition, 380);
contentStream.drawString(message);
message = "completed 42,2 km marathon with the folowing result:";
stringWidth = font.getStringWidth(message);
centeredPosition = (pageSize.getWidth() - (stringWidth * fontSize) / 1000f) / 2f;
contentStream.setTextMatrix(1, 0, 0, 1, centeredPosition, 360);
contentStream.drawString(message);
message = "Byssutími / Official time: 2:33:58" ;
stringWidth = font.getStringWidth(message);
centeredPosition = (pageSize.getWidth() - (stringWidth * fontSize) / 1000f) / 2f;
contentStream.setTextMatrix(1, 0, 0, 1, centeredPosition, 330);
contentStream.drawString(message);
message = "Flögutími / Chip time: 2:33:55" ;
stringWidth = font.getStringWidth(message);
centeredPosition = (pageSize.getWidth() - (stringWidth * fontSize) / 1000f) / 2f;
contentStream.setTextMatrix(1, 0, 0, 1, centeredPosition, 310);
contentStream.drawString(message);
message = "1. sæti af 563 þátttakendum, 407 karlar og 156 konur" ;
stringWidth = font.getStringWidth(message);
centeredPosition = (pageSize.getWidth() - (stringWidth * fontSize) / 1000f) / 2f;
contentStream.setTextMatrix(1, 0, 0, 1, centeredPosition, 290);
contentStream.drawString(message);
message = "Place 1 of 563 finishers, 407 male and 156 female" ;
stringWidth = font.getStringWidth(message);
centeredPosition = (pageSize.getWidth() - (stringWidth * fontSize) / 1000f) / 2f;
contentStream.setTextMatrix(1, 0, 0, 1, centeredPosition, 270);
contentStream.drawString(message);
message = "1. sæti kynjaskipt, Placement: 1 by gender";
stringWidth = font.getStringWidth(message);
centeredPosition = (pageSize.getWidth() - (stringWidth * fontSize) / 1000f) / 2f;
contentStream.setTextMatrix(1, 0, 0, 1, centeredPosition, 250);
contentStream.drawString(message);
message = "1. sæti í flokknum: Karlar 18 til 39 ára" ;
stringWidth = font.getStringWidth(message);
centeredPosition = (pageSize.getWidth() - (stringWidth * fontSize) / 1000f) / 2f;
contentStream.setTextMatrix(1, 0, 0, 1, centeredPosition, 230);
contentStream.drawString(message);
message = "Place: 1 in age group: Men 18 to 39 years" ;
stringWidth = font.getStringWidth(message);
centeredPosition = (pageSize.getWidth() - (stringWidth * fontSize) / 1000f) / 2f;
contentStream.setTextMatrix(1, 0, 0, 1, centeredPosition, 210);
contentStream.drawString(message);
contentStream.endText();
contentStream.close();
doc.save("/Users/palli/Downloads/rm_vidurkenning_2010.pdf");
} finally {
if (doc != null) {
doc.close();
}
}
}
}